/**
 * 图片URL处理工具
 */
import { getServerBaseUrl } from '@/config'

const API_BASE_URL = getServerBaseUrl()

/**
 * 获取图片完整URL
 * @param {string|array} images - 图片路径或图片数组
 * @param {boolean} getFirst - 如果是数组，是否只返回第一张
 * @returns {string} 完整的图片URL
 */
export function getImageUrl(images, getFirst = true) {
  // 如果是空值，返回占位图
  if (!images) {
    return '/placeholder.png'
  }
  
  // 如果是数组，处理数组
  if (Array.isArray(images)) {
    if (images.length === 0) {
      return '/placeholder.png'
    }
    
    if (getFirst) {
      return buildImageUrl(images[0])
    }
    
    return images.map(img => buildImageUrl(img))
  }
  
  // 如果是字符串，尝试解析JSON
  if (typeof images === 'string') {
    try {
      const parsed = JSON.parse(images)
      if (Array.isArray(parsed)) {
        return getImageUrl(parsed, getFirst)
      }
    } catch (e) {
      // 不是JSON，作为单个路径处理
    }
  }
  
  return buildImageUrl(images)
}

/**
 * 构建单个图片的完整URL
 * @param {string} imagePath - 图片路径
 * @returns {string} 完整的图片URL
 */
function buildImageUrl(imagePath) {
  if (!imagePath) {
    return '/placeholder.png'
  }
  
  // 转换为字符串并去除首尾空格和引号
  let cleanPath = String(imagePath).trim()
  if (cleanPath.startsWith('"') && cleanPath.endsWith('"')) {
    cleanPath = cleanPath.slice(1, -1)
  }
  if (cleanPath.startsWith("'") && cleanPath.endsWith("'")) {
    cleanPath = cleanPath.slice(1, -1)
  }
  
  // 如果已经是完整的HTTP URL，直接返回
  if (cleanPath.startsWith('http://') || cleanPath.startsWith('https://')) {
    return cleanPath
  }
  
  // 如果是完整的API路径，添加base URL
  if (cleanPath.startsWith('/api/v1/files/view/')) {
    return `${API_BASE_URL}${cleanPath}`
  }
  
  // 如果以/api开头，添加base URL
  if (cleanPath.startsWith('/api')) {
    return `${API_BASE_URL}${cleanPath}`
  }
  
  // 如果以uploads开头（相对路径）
  if (cleanPath.startsWith('uploads/')) {
    return `${API_BASE_URL}/api/v1/files/view/${cleanPath}`
  }
  
  // 如果以products、avatars等分类开头
  if (cleanPath.match(/^(products|avatars|documents)\//)) {
    return `${API_BASE_URL}/api/v1/files/view/${cleanPath}`
  }
  
  // 其他情况，作为相对路径处理
  const path = cleanPath.startsWith('/') ? cleanPath : `/${cleanPath}`
  return `${API_BASE_URL}/api/v1/files/view${path}`
}

/**
 * 验证图片文件
 * @param {File} file - 文件对象
 * @returns {object} 验证结果 {valid: boolean, message: string}
 */
export function validateImageFile(file) {
  // 检查文件是否存在
  if (!file) {
    return { valid: false, message: '请选择图片文件' }
  }
  
  // 检查文件类型
  const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp']
  if (!allowedTypes.includes(file.type)) {
    return { valid: false, message: '只支持 JPG、PNG、GIF、WEBP 格式的图片' }
  }
  
  // 检查文件大小（5MB）
  const maxSize = 5 * 1024 * 1024
  if (file.size > maxSize) {
    return { valid: false, message: '图片大小不能超过 5MB' }
  }
  
  return { valid: true, message: '' }
}

/**
 * 图片加载错误处理
 * @param {Event} event - 图片加载错误事件
 */
export function handleImageError(event) {
  const target = event.target
  
  // 如果已经是占位图，不再处理，防止无限循环
  if (target.src.endsWith('/placeholder.png') || target.src.includes('placeholder.png')) {
    target.onerror = null
    return
  }
  
  // 标记图片已经失败，避免重复处理
  if (target.dataset.failed === 'true') {
    return
  }
  
  target.dataset.failed = 'true'
  target.src = '/placeholder.png'
  target.onerror = null // 移除错误处理，防止无限循环
  
  // 添加一个class用于样式标识
  target.classList.add('image-fallback')
}

